package src.CodeTop;

/**
 * 输入一个链表，输出该链表中倒数第k个节点。为了符合大多数人的习惯，本题从1开始计数，即链表的尾节点是倒数第1个节点。
 *
 * 例如，一个链表有 6 个节点，从头节点开始，它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。
 *
 *  
 *
 * 示例：
 *
 * 给定一个链表: 1->2->3->4->5, 和 k = 2.
 *
 * 返回链表 4->5.
 *
 */

public class _JZ22 {
    public static void main(String[] args) {

    }

    public static ListNode getKthFromEnd(ListNode head, int k) {
        // 校验合法性
        if (head == null) {
            return null;
        }
        // 首次遍历的指针
        ListNode cur1 = head;
        // 遍历指针并计算链表长度
        int length = 0;
        while (cur1 != null) {
            length++;
            cur1 = cur1.next;
        }
        // 二次遍历的指针
        ListNode cur2 = head;
        for (int i = 0 ; i < length - k ; i++) {
            cur2 = cur2.next;
        }
        return cur2;
    }
}
